package com.agile.leetcode.hutool.imageUtils;

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import org.junit.Test;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * 胡图工具包的图片工具类的使用
 *
 * @Author ChenZhangKun
 * @Date 2020/12/30 10:11
 */
public class ImageUtilsDemo {
    /**
     * 缩放图片
     */
    @Test
    public void scale() {
        // 0.5的缩放比例
        ImgUtil.scale(
                FileUtil.file("E:\\nzq3.jpg"),
                FileUtil.file("E:\\nzq4.jpg"),
                0.5f
        );
    }

    @Test
    public void cut() {
        ImgUtil.cut(
                FileUtil.file("D:\\czk\\hutool\\hu.jpg"),
                FileUtil.file("D:\\czk\\hutool\\huCut.jpg"),
                // 裁剪的矩形区域
                new Rectangle(200, 200, 100, 100)
        );
    }

    @Test
    public void slice() {
        ImgUtil.slice(
                FileUtil.file("D:\\czk\\hutool\\hu.jpg"),
                FileUtil.file("D:\\czk\\hutool\\"),
                // 分为十行十列
                10,
                10
        );
    }

    /**
     * convert 图片类型转换，支持GIF->JPG、GIF->PNG、PNG->JPG、PNG->GIF(X)、BMP->PNG等
     */
    @Test
    public void convert() {
        ImgUtil.convert(FileUtil.file("D:\\czk\\hutool\\hu.jpg"), FileUtil.file("D:\\czk\\hutool\\hu.png"));
    }

    /**
     * 转为灰色
     */
    @Test
    public void gray() {
        ImgUtil.gray(FileUtil.file("D:\\czk\\hutool\\hu.jpg"), FileUtil.file("D:\\czk\\hutool\\hugray.jpg"));
    }

    /**
     * 添加水印
     */
    @Test
    public void pressText() {
        ImgUtil.pressText(
                FileUtil.file("D:\\czk\\hutool\\hu.jpg"),
                FileUtil.file("D:\\czk\\hutool\\hupresstext.jpg"),
                // 水印
                "陈彰坤", Color.BLUE,
                // 字体
                new Font("黑体", Font.BOLD, 100),
                0, //x坐标修正值。 默认在中间，偏移量相对于中间偏移
                0, //y坐标修正值。 默认在中间，偏移量相对于中间偏移
                0.8f//透明度：alpha 必须是范围 [0.0, 1.0] 之内（包含边界值）的一个浮点数字
        );
    }

    /**
     * 添加图片水印
     */
    @Test
    public void pressImage() {
        ImgUtil.pressImage(
                FileUtil.file("D:\\czk\\hutool\\hu.jpg"),
                FileUtil.file("D:\\czk\\hutool\\hupressimage.jpg"),
                ImgUtil.read(FileUtil.file("D:\\czk\\hutool\\hu.jpg")), //水印图片
                0, //x坐标修正值。 默认在中间，偏移量相对于中间偏移
                0, //y坐标修正值。 默认在中间，偏移量相对于中间偏移
                0.1f
        );
    }

    /**
     * 旋转图片
     *
     * @throws IOException
     */
    @Test
    public void rotatePic() throws IOException {
        // 旋转180度
        BufferedImage image = (BufferedImage) ImgUtil.rotate(ImageIO.read(FileUtil.file("D:\\czk\\hutool\\hu.jpg")), 180);
        ImgUtil.write(image, FileUtil.file("D:\\czk\\hutool\\hurotate.jpg"));
    }

    /**
     * 水平翻转图片
     */
    @Test
    public void flip() {
        ImgUtil.flip(FileUtil.file("D:\\czk\\hutool\\hu.jpg"), FileUtil.file("D:\\czk\\hutool\\huflip.jpg"));
    }
}

